#pragma once

// Copyright (c) 2010 Manuel Peinado Gallego <manuel.peinado@gmail.com>
// Distributed under the MIT license

// World.h : interface of the World class
//

#include "NodeManager.h"
#include "LightManager.h"
#include "MaterialManager.h"
#include "ShaderManager.h"
#include "TextureManager.h"
#include "MeshManager.h"


class World : boost::noncopyable
{
public:

    World();
    ~World();

    void clear();

    NodeManager& getNodeManager();
    LightManager& getLightManager();
    MaterialManager& getMaterialManager();
    ShaderManager& getShaderManager();
    TextureManager& getTextureManager();
    MeshManager& getMeshManager();

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    // Serialization

    void read(std::wistream& is);
    void write(std::wostream& os) const;

    
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

protected:

    NodeManager m_nodeManager;
    LightManager m_lightManager;
    
    MaterialManager m_materialManager;
    ShaderManager m_shaderManager;
    TextureManager m_textureManager;

    MeshManager m_meshManager;
};

